package com.zm.oes.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zm.oes.entity.FillQuestion;
import org.apache.ibatis.annotations.*;

import java.util.List;

//填空题
@Mapper
public interface FillQuestionMapper {

    /**
     * 使用了 @Select 注解标记，表示这是一个查询语句
     * 查询语句从 fill_question 表中选取所有符合条件的填空题信息
     * 查询条件是在 paper_manage 表中查找与指定作业ID (paperId) 相关的填空题的题目ID，并且该题目类型是填空题
     * 参数 paperId 用于指定作业ID，返回类型为 List<FillQuestion>，表示返回的结果是一个填空题对象列表
     */
    @Select("select * from fill_question where questionId in " +
            "(select questionId from paper_manage where questionType = 2 and paperId = #{paperId})")
    List<FillQuestion> findByIdAndType(Integer paperId);

    @Select("select * from fill_question")
    IPage<FillQuestion> findAll(Page page);

    /**
     * 查询最后一条questionId
     * @return FillQuestion
     */
    @Select("select questionId from fill_question order by questionId desc limit 1")
    FillQuestion findOnlyQuestionId();

    /**
     * 使用了 @Options 注解来指定使用自动生成的主键，并将其映射到 questionId 属性
     * 使用了 @Insert 注解标记，表示这是一个插入操作
     * 插入操作将给定的填空题信息插入到 fill_question 表中
     * 插入的字段包括科目 (subject)、题目 (question)、答案 (answer)、解析 (analysis)、难度等级 (level) 和章节 (section)
     * 方法的参数为一个 FillQuestion 对象，其中包含了待插入的填空题信息
     */
    @Options(useGeneratedKeys = true,keyProperty ="questionId" )
    @Insert("insert into fill_question(subject,question,answer,analysis,level,section) values " +
            "(#{subject},#{question},#{answer},#{analysis},#{level},#{section})")
    int add(FillQuestion fillQuestion);

    /**
     * 使用了 @Select 注解标记，表示这是一个查询语句
     * 查询语句从 fill_question 表中选取符合条件的填空题的题目ID
     * 查询条件是指定科目 (subject) 的填空题，并且按照随机顺序选取指定数量的题目ID
     * 参数 subject 用于指定科目，pageNo 用于指定返回结果的数量
     * 返回类型为 List<Integer>，表示返回的结果是一个填空题的题目ID列表
     */
    @Select("select questionId from fill_question where subject = #{subject} order by rand() desc limit #{pageNo}")
    List<Integer> findBySubject(@Param("subject") String subject, @Param("pageNo") Integer pageNo);

    /**
     * 使用了 @Update 注解标记，表示这是一个更新操作
     * 更新操作会根据给定的题目ID (questionId) 更新 fill_question 表中对应的填空题信息
     * 更新的字段包括章节 (section)、题目 (question)、答案 (answer)、难度等级 (level) 和解析 (analysis)
     * 方法的参数为一个 FillQuestion 对象，其中包含了待更新的填空题信息
     */
    @Update("update fill_question set section = #{section}, question = #{question}, answer = #{answer}, " +
            "level = #{level}, analysis = #{analysis} where questionId = #{questionId}")
    int edit(FillQuestion fillQuestion);
}
